package com.cskaoyan.javase.oop3._2inner._4local._0introduction;

/**
 * 学习局部内部类,先明确以下两条:
 *      1.局部内部类是一种比成员内部类更加极致封装思想的体现，成员内部类在成员位置，类中都是可以访问到它的。但是局部内部类一旦出了作用域等就不再生效了。
 *
 *      2.局部内部类的使用会显著增加代码层级，导致代码可读性很变差，所以如无必要不要使用局部内部类。
 *      如果你在局部位置碰到问题，希望有一个对象能够解决问题，需要定义一个类，同时又希望该类不被外界所感知，仅在方法内部生效，就可以使用局部内部类。
 *      当然，局部内部类在某些时候，还能节省一些代码量，会方便一些。
 *
 * 局部内部类
 * 局部内部类是定义在一个方法或者一个作用域里面的类
 * 简单来说，将局部内部类看成是局部变量即可，该类的有效范围仅在作用域内部。
 * （这意味着要创建它的对象，必须在作用域内部创建）
 *
 * 从语法和具体使用上看，局部内部类和成员内部类很相似
 * 有点类似于直接把一个成员内部类放进局部位置，语法是：
 * // 局部位置
 * class Inner{
 *
 * }
 * // 局部位置
 *
 *
 * 自身特点
 * 主要从以下几个角度分析：
 *      1.访问权限修饰符
 *          没有访问权限的概念,因为它已经被作用域限制死了作用范围,访问权限完全不需要
 *          类似于局部变量
 *          同样的,它也不能用static修饰
 *
 *      2.成员特点
 *          局部内部类的成员特点完全和成员内部类一样:
 *          没有static声明,但是可以定义不触发类初始化的全局常量(用字面值常量赋值的全局常量)
 *
 *      3.继承和实现
 *          可以继承可以实现
 *
 * @since 11:37
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
}

class EnclosedClazz {
    // 外围类的成员方法
    public void testEnclose() {
        // 外围类的成员方法中的局部内部类
        class Inner{
            int a;
            private int b = 10;
            // static int c = 20;
            // static void testStatic(){}
            // static {}

            public Inner() {
            }
            {}
            public void testInner(){}
        }
        new Inner();
    }
}